/*
 * Project Name spring-boot-tools
 * File Name ConnectResponseMsg
 * Package Name com.huxiaosu.tools.cmpp.model.action
 * Create Time 2024/4/20
 * Create by name：liujie
 */
package com.huxiaosu.tools.cmpp.model.action;

import com.huxiaosu.tools.cmpp.model.MessageHeader;
import lombok.Data;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;

/**
 * ISMP->SP
 *
 * @author liujie
 * @date 2024/4/20 13:58
 */
@SuppressWarnings("AlibabaLowerCamelCaseVariableNaming")
@Slf4j
@Data
@ToString
public class ConnectRespMsg extends MessageHeader {

    /**
     * 响应状态状态 0：正确 1：消息结构错 2：非法源地址 3：认证错 4：版本太高 5~ ：其他错误
     */
    private int status;

    /**
     * 用于鉴别源地址。其值通过单向MD5 hash计算得出，表示如下：
     * <li>AuthenticatorISMG =MD5（Status+AuthenticatorSource+shared secret）</li>
     * <li>Shared secret 由中国移动与源地址实体事先商定，</li>
     * <li>AuthenticatorSource为源地址实体发送给ISMG的对应消息CMPP_Connect中的值</li>
     * <li>认证出错时，此项为空。</li>
     */
    private byte[] authenticatorISMG;

    /**
     * 服务器支持的最高版本号，对于3.0的版本，高4bit为3，低4位为0
     */
    private byte version;

    public byte[] toByte() {
        ByteArrayOutputStream bous = new ByteArrayOutputStream();
        DataOutputStream dous = new DataOutputStream(bous);
        try {
            dous.writeInt(super.getTotalLength());
            dous.writeInt(super.getCommandId());
            dous.writeInt(super.getSequenceId());
            dous.writeInt(this.status);
            dous.write(this.authenticatorISMG);
            dous.writeInt(this.version);
            dous.close();
        }
        catch (IOException e) {
            log.error("< ConnectResp toByte error...>", e);
        }
        return bous.toByteArray();
    }

}
